/* 
 * AgenteAssociadoAlaRule.java
 * 
 * Data de criação: 13/10/2010
 * 
 * O2 SOLUTIONS - SOLUÇÕES EM TECNOLOGIA DA INFORMAÇÃO. 
 *
 */
package br.com.o2solutions.siso.business.rule.agente;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import br.com.o2solutions.core.exception.BusinessException;
import br.com.o2solutions.core.exception.enumerator.ExceptionScope;
import br.com.o2solutions.core.integration.repository.DataBaseIntegration;
import br.com.o2solutions.core.service.rule.Rule;
import br.com.o2solutions.siso.integration.entidade.Agente;
import br.com.o2solutions.siso.integration.entidade.AlaAgente;
import br.com.o2solutions.util.assertion.Assert;

/**
 * Classe responsável por verificar se o {@link Agente} já está vinculado a uma
 * Ala. Caso esteja é lançada uma exceção informando tal vinculação.
 * 
 * @author osvaldeir
 * @since 13/10/2010
 * 
 */
@Component("agenteAssociadoAlaRule")
public class AgenteVerificaAssociacaoAlaRule implements Rule<Agente> {

	@Value("#{alaAgenteDAO}")
	private DataBaseIntegration<AlaAgente> alaAgenteDAO;

	/**
	 * {@inheritDoc}Pesquisa se o {@link Agente} possui vinculo com alguma Ala.
	 * Caso esta afirmativa seja verdadeira é lançada uma exceção informando a
	 * existência da vinculação.
	 */
	@Override
	public void check(Agente entity) throws BusinessException {
		if (entity.getId() == null)
			return;
		Assert.isEmpty(
				alaAgenteDAO.findByNamedQuery(
						"AlaAgente.findAgenteVinculadoAtivamenteAla",
						entity.getId()),
				new BusinessException(
						"Agente viculado a outra Ala. Utilize o metodo vincularAgente",
						"error.agente.ala.association.exist",
						ExceptionScope.BUSINESS_VALIDATION));
	}

}
